package org.javaee7.websocket.googledocs.client; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import javafx.application.Application; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.TextArea; import javafx.stage.Stage; import javax.websocket.ClientEndpoint; import javax.websocket.ContainerProvider; import javax.websocket.DeploymentException; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.WebSocketContainer; /** * @author Arun Gupta */ @ClientEndpoint public class GoogleDocClient extends Application { static TextArea textarea; public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { final Session session = connectToServer(); System.out.println("Connected to server: " + session.getId()); stage.setTitle("Google Docs Emulator using WebSocket"); textarea = new TextArea(); textarea.textProperty().addListener( new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { System.out.println("New value: " + newValue); try { session.getBasicRemote().sendText(newValue); } catch (IOException ex) { Logger.getLogger(GoogleDocClient.class.getName()).log(Level.SEVERE, null, ex); } } } ); textarea.setPrefSize(500, 300); textarea.setWrapText(true); Scene scene = new Scene(textarea); stage.setScene(scene); stage.show(); } @OnOpen public void onOpen(Session session) { System.out.println("Connected to endpoint: " + session.getBasicRemote()); } @OnMessage public void onMessage(String message, Session session) throws IOException { final String newMessage = message; System.out.println("Received message in client: " + message); Platform.runLater(new Runnable() { @Override public void run() { textarea.setText(newMessage); textarea.positionCaret(newMessage.length()); } }); } private Session connectToServer() throws URISyntaxException, DeploymentException, IOException { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); return container.connectToServer(GoogleDocClient.class, new URI("ws://localhost:8080/server/websocket")); } }